#include "header.h"

int main()
{
    // 1. 生成 Key , 并且参数和客户端一样, 就可以保证两者可以获取到同一份共享内存
    key_t key = ftok("/home/shit", 8888888);
    // 2. 申请共享内存的空间, 如果已经申请了, 那么就获取这个空间的 shmid
    int shmid = shmget(key, 2048, IPC_CREAT | 0666 | IPC_EXCL);
    // 3. 挂靠到自己的虚拟地址空间上, 并返回这个虚拟地址
    char* address = (char*) shmat(shmid, nullptr, 0); // 0 表示默认读写权限
    // 4. 开始通信，接收客户发送的数据
    while (true) {
        // 写端是直接往这个虚拟地址上写入数据的, 服务端也就直接从这个地址开始读取数据了
        if (address != NULL && address[0] != '\0') {
            cout << "收到客户发送的数据：" << address << endl;
        }
        sleep(1);
    }

    // 5. 取消挂靠
    shmdt((void*) address);
    // 6. 服务器即将关闭, 将共享内存释放了
    shmctl(shmid, IPC_RMID, nullptr);
    return 0;
}